package com.example.service;

import java.util.List;
import java.util.Set;

/**
 * 权限同步服务接口
 * 用于解决权限和菜单分配时的循环依赖问题
 */
public interface PermissionSyncService {
    
    /**
     * 为角色分配权限时，同步分配相关菜单
     * 
     * @param roleId 角色ID
     * @param permissionIds 权限ID列表
     * @return 同步分配的菜单数量
     */
    int syncMenusForPermissions(Long roleId, List<Long> permissionIds);
    
    /**
     * 为角色分配菜单时，同步分配相关权限
     * 
     * @param roleId 角色ID
     * @param menuIds 菜单ID列表
     * @return 同步分配的权限数量
     */
    int syncPermissionsForMenus(Long roleId, List<Long> menuIds);
    
    /**
     * 根据权限编码获取相关菜单ID
     * 
     * @param permissionCodes 权限编码列表
     * @return 相关菜单ID集合
     */
    Set<Long> getRelatedMenusByPermissionCodes(List<String> permissionCodes);
    
    /**
     * 根据菜单ID获取相关权限ID
     * 
     * @param menuIds 菜单ID列表
     * @return 相关权限ID集合
     */
    Set<Long> getRelatedPermissionsByMenuIds(List<Long> menuIds);
    
    /**
     * 检查并修复角色的权限菜单一致性
     * 
     * @param roleId 角色ID
     * @return 修复结果描述
     */
    String checkAndFixRolePermissionConsistency(Long roleId);
}
